/*
 * @Author: 薛严 348352046@qq.com
 * @Date: 2022-11-01 22:26:01
 * @LastEditors: 薛严 348352046@qq.com
 * @LastEditTime: 2022-11-18 18:47:23
 * @FilePath: /vite-react-template/src/App.tsx
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */


import { useRoutes, useLocation, useNavigate } from "react-router-dom"
import router from "./router"
import { message } from "antd"
import React, { useEffect } from "react"
const Context = React.createContext({ name: 'Default' });
// 路由拦截
function BeforeRouterEnter() {
  const outlet = useRoutes(router)
  /*
      后台管理系统两种经典的跳转情况：
      1、如果访问的是登录页面， 并且有token， 跳转到首页
      2、如果访问的不是登录页面，并且没有token， 跳转到登录页
      3、其余的都可以正常放行
    */
  const location = useLocation()
  let token = localStorage.getItem("liuyangong-token");
  //1、如果访问的是登录页面， 并且有token， 跳转到首页
  if (location.pathname === "/login" && token) {
    debugger
    // 这里不能直接用 useNavigate 来实现跳转 ，因为需要BeforeRouterEnter是一个正常的JSX组件
    return <ToPage1 />
  }
  //2、如果访问的不是登录页面，并且没有token， 跳转到登录页
  if (location.pathname !== "/login" && !token) {
    return <ToLogin />
  }

  return outlet
}

// 去往登录页的组件
function ToLogin() {
  const [messageApi, contextHolder] = message.useMessage();

  const navigateTo = useNavigate()
  // 加载完这个组件之后实现跳转
  useEffect(() => {
    // 加载完组件之后执行这里的代码
    navigateTo("/login");
    messageApi.open({
      type: 'info',
      content: <Context.Consumer>{({ name }) => `Hello, ${name}!`}</Context.Consumer>,
      duration: 1,
    });
  }, [])
  return <div></div>
}
// 去往首页的组件
function ToPage1() {
  const navigateTo = useNavigate()
  // 加载完这个组件之后实现跳转
  useEffect(() => {
    // 加载完组件之后执行这里的代码
    navigateTo("/page1");
    // message.warning("您已经登录过了！");
  }, [])
  return <div></div>
}
function App() {
  return (
    <div className="App">
      <BeforeRouterEnter />
    </div>
  )
}

export default App
